
package action;

import java.io.Serializable;

import org.hibernate.Session;
import org.hibernate.Transaction;

import bean.User;
import util.HibernateUtil;

/**
 * 本类用于测试使用用session对象进行对数据库进行增删改操作和通过主键查的操作
 * 
 * @author 半颗柠檬、
 * 
 */
public class Test_Session {
	public static void main(String[] args) {
		
		//Test_Session.insert();
		//这个方法只能通过主键来查询某个类（即通过主键查询数据库中某个表的某条记录，）
		//Test_Session.findObjByKey();
		
//		Test_Session.update();
		Test_Session.del();
	}



	private static void insert() {

		Session session = null;
		Transaction tran = null;
		/**
		 * 新建一个User对象，相当于jdbc的insert语句
		 */
		User user=new User();
		user.setIsAdmin("n");
		user.setPassword("123");
		user.setSex("男");
		user.setUsername("user2");
		user.setUserid(3);

		try {
			// 获取session， 相当于jdbc的Connection
			session = HibernateUtil.getSession();
			// 开启session的事务，hibernate的事务不会自动提交，每次进行增删改操作都需要手动提交事务
			tran = session.beginTransaction();

			// session.save方法相当于jdbc的insert语句，并返回一个Serializable接口，注意javabean这里User类实现这个接口
			// 这里返回user的主键
			Serializable primarykey = session.save(user);
			System.out.println(primarykey);

			// 提交事务
			tran.commit();

		} catch (Exception e) {
			e.printStackTrace();
			//出现异常则进行回滚操作
			tran.rollback();
		} finally {

			// 关闭连接
			HibernateUtil.closeSession();
		}

	}
	

	/**
	 * 通过主键查询出某个对象（即查询出某个表中的某条记录）
	 */
	private static void findObjByKey() {
		Session session=null;
		Transaction tran=null;

		try {
			//获取session连接
			session=HibernateUtil.getSession();
			//开启事务
			tran=session.beginTransaction();
			/**
			 * 使用load查询
			 */
			//通过主键查找某个javabean，这里的主键要与javabean的属性类型匹配。比如User类的userid属性是Integer类型的，则2也必须是Integer类型的
			User user=(User)session.load(User.class, 2);
			
			System.out.println(user.getUserid());
			System.out.println(user.getUsername());
			System.out.println(user.getPassword());
			System.out.println(user.getSex());
			System.out.println(user.getIsAdmin());
			
			
			/**
			 * 使用get方法查询,一般查询使用get方法，而不是用load方法
			 */
			User user1=(User)session.get(User.class, new Integer(1));
			System.out.println(user1.getUserid());
			System.out.println(user1.getUsername());
			System.out.println(user1.getPassword());
			System.out.println(user1.getSex());
			System.out.println(user1.getIsAdmin());
			
			//提交事务
			tran.commit();
			
		} catch (Exception e) {
			e.printStackTrace();
			tran.rollback();
		}finally{
			HibernateUtil.closeSession();
		}
		
	}

	
/**
 * 修改
 */
	private static void update() {
		Session session=null;
		Transaction tran=null;
		
		try {
			session=HibernateUtil.getSession();
			tran=session.beginTransaction();
			
			User user=(User)session.get(User.class, new Integer(3));
			user.setUserid(new Integer(3));
			user.setUsername("修改后的name");
			user.setPassword("123123");
			
			
			session.update(user);
			
			tran.commit();
		} catch (Exception e) {
			e.printStackTrace();
			tran.rollback();
		}finally{
			
			HibernateUtil.closeSession();
		}
		
		
	}

	

	private static void del() {

			Session session=null;
			Transaction tran=null;
			
			
			try {
				session=HibernateUtil.getSession();
				tran=session.beginTransaction();
				
				User user=(User)session.get(User.class, new Integer(3));
						
				session.delete(user);
						
				tran.commit();
			} catch (Exception e) {
				e.printStackTrace();
				tran.rollback();
			}finally{
				HibernateUtil.closeSession();
			}
			
		
		
	}

	
	
}


	

